const _ = require('lodash')

// const groupTypes = ['two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'ten', 'twelve', 'sixteen', 'twentyfour']
const sortGroupTypes = ['two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'ten', 'twelve', 'sixteen']

module.exports = (groups) => {
  const filteredGroups = groups.filter((group) => {
    const arr = group.accuracy_array
    // 检查最近3次是否连续错误
    const n = 3
    const lastThreeResults = arr.slice(-n)
    return (
      arr.length >= n &&
      lastThreeResults.every((result) => result === 0) &&
      arr.slice(-4, -3).every((result) => result === 1) &&
      group.stats.accuracyRate >= 1 - 16 / 49 + 0.05
      // group.stats.accuracyRate >= 1 - 16 / 49 &&
      // group.stats.maxConsecutiveIncorrect === 4
    )
  })

  const groupByGroups = _.chain(filteredGroups)
  // const groupByGroups = _.chain(groups)
    .groupBy('groupType')
    .mapValues((group) => {
      // 按准确率排序并返回最高的一个
      return _.chain(group)
        .orderBy(
          [
            (item) => item.maxConsecutiveCorrect, // 最大连续正确次数
            (item) => -item.stats.accuracyRate, // 准确率
            (item) => item.stats.avgConsecutiveCorrect, // 平均连续正确次数
            // (item) => item.stats.currentConsecutiveIncorrect - item.stats.maxConsecutiveIncorrect, // 差值分组并升序排序
            (item) => item.stats.currentConsecutiveIncorrect // 当前连续错误次数
          ],
          // 对应排序方向
          [
            'asc',
            'desc',
            'desc',
            'desc'
          ]
        )
        .take(1) // 取第一个
        .value()
    })
    .flatMap()
    // 根据groupType排序
    .sort((a, b) => sortGroupTypes.indexOf(a.groupType) - sortGroupTypes.indexOf(b.groupType))
    .value()

  return groupByGroups
}
